1 module mruby.mrb_class;
2 
3 import mruby.object;
4 import mruby.variable;
5 import mruby.value;
6 import mruby.proc;
7 import mruby;
8 
9 extern (C):
10 
11 struct RClass
12 {
13 	enum mrb_vtype
14 	{
15 		MRB_TT_FALSE = 0,
16 		MRB_TT_FREE = 1,
17 		MRB_TT_TRUE = 2,
18 		MRB_TT_FIXNUM = 3,
19 		MRB_TT_SYMBOL = 4,
20 		MRB_TT_UNDEF = 5,
21 		MRB_TT_FLOAT = 6,
22 		MRB_TT_CPTR = 7,
23 		MRB_TT_OBJECT = 8,
24 		MRB_TT_CLASS = 9,
25 		MRB_TT_MODULE = 10,
26 		MRB_TT_ICLASS = 11,
27 		MRB_TT_SCLASS = 12,
28 		MRB_TT_PROC = 13,
29 		MRB_TT_ARRAY = 14,
30 		MRB_TT_HASH = 15,
31 		MRB_TT_STRING = 16,
32 		MRB_TT_RANGE = 17,
33 		MRB_TT_EXCEPTION = 18,
34 		MRB_TT_FILE = 19,
35 		MRB_TT_ENV = 20,
36 		MRB_TT_DATA = 21,
37 		MRB_TT_FIBER = 22,
38 		MRB_TT_MAXDEFINE = 23
39 	}
40 	mrb_vtype tt;
41 	uint color;
42 	uint flags;
43 	RClass* c;
44 	RBasic* gcnext;
45 	iv_tbl* iv;
46 	kh_mt* mt;
47 	RClass* super_;
48 }
49 
50 RClass* mrb_class (mrb_state* mrb, mrb_value v);
51 RClass* mrb_define_class_id (mrb_state*, mrb_sym, RClass*);
52 RClass* mrb_define_module_id (mrb_state*, mrb_sym);
53 RClass* mrb_vm_define_class (mrb_state*, mrb_value, mrb_value, mrb_sym);
54 RClass* mrb_vm_define_module (mrb_state*, mrb_value, mrb_sym);
55 void mrb_define_method_vm (mrb_state*, RClass*, mrb_sym, mrb_value);
56 void mrb_define_method_raw (mrb_state*, RClass*, mrb_sym, RProc*);
57 void mrb_define_method_id (mrb_state* mrb, RClass* c, mrb_sym mid, mrb_func_t func, mrb_aspec aspec);
58 void mrb_alias_method (mrb_state* mrb, RClass* c, mrb_sym a, mrb_sym b);
59 RClass* mrb_class_outer_module (mrb_state*, RClass*);
60 RProc* mrb_method_search_vm (mrb_state*, RClass**, mrb_sym);
61 RProc* mrb_method_search (mrb_state*, RClass*, mrb_sym);
62 RClass* mrb_class_real (RClass* cl);
63 void mrb_gc_mark_mt (mrb_state*, RClass*);
64 size_t mrb_gc_mark_mt_size (mrb_state*, RClass*);
65 void mrb_gc_free_mt (mrb_state*, RClass*);